<?php
class importPostsFromFile
{
    private $dirname;
    private $reg;
    private $repl;
    
    public function __construct($path, $file, $reg=0, $repl=0) {        
          include_once 'pclzip.lib.php';
          $this->dirname = $path;
          $this->reg = $reg;
          $this->repl = $repl;
          
           // print_r($file);
           //$this->moveFile();
           $this->unZipFiles($file);
           $this->deleteFile();
           $this->addPost($this->dirname);
    }

    
    private function unZipFiles($file){
        
        $zip = new PclZip($this->dirname.$file);
                 if (($list = $zip->listContent()) == 0) {die("Error : ".$zip->errorInfo(true));  }
             $zip->extract($this->dirname);
             echo "Archive sucessfuly extracted!<br>\n";
      
        
    }
    private function addPost($dirname){
        /*1. Заходим в основную директорию
         *2. По порядку заходим в каждую папку
         *3.
         * 
         */
        
          $arrFiles = scandir($dirname);

            foreach ($arrFiles as $strFile)
            {
                if (($strFile == '.') or ($strFile == '..')) continue;
                $ftype = filetype($dirname.$strFile);
                    if ($ftype=="dir") {
                        $this->addPost($dirname.$strFile."/");}else{
                        
                            // echo "content--------<br>";
                            $content_file = file_get_contents($dirname.$strFile);
                    
                            //echo $content_file;
                            preg_match("/\/(\w+)\/$/", $dirname, $category);
                            echo "category-------- $category[1] -----<br>";
                            preg_match("/([^.]+)/im", $strFile, $title);
                            echo "title----------------- ".$title[1]."<br>";
                             $title = str_replace("_", " ", $title[1]);
                             
                             // применяем пользовательские регулярки
                             if ($this->reg and $this->repl){
                                
                                   $content_file = preg_replace($this->reg, $this->repl, $content_file);
                                   $category[1] = preg_replace($this->reg, $this->repl, $category[1]);
                                   $title = preg_replace($this->reg, $this->repl, $title);
                                                          }
                             
                             $this->addToDB($category[1], $title, $content_file);
                             unlink($dirname.$strFile);
                        
                        }
                }  
              if ($dirname!=="../zip/upload/"){                  
                rmdir($dirname);
                echo "удалена папка ".$dirname;
                
                }
             
    }
    
    private function moveFile(){
        move_uploaded_file($_FILES["filename"]["tmp_name"], $this->dirname.$_FILES["filename"]["name"]);    
    }
     private function deleteFile(){
         unlink($this->dirname.$_FILES["filename"]["name"]);
     }
     
     private function addToDB($category, $title, $content)
     {
         //1. найти по наименованию категорию 
         //2 если такая категория есть то взять ее 
         //3 если такой категории нет то вставить ее
         //4 вставить пост в базу с соотв. категорией
         
         global $DATABASE;
         
        $category = trim($category);
         
        $sql ="SELECT c.ID, c.cat_name 
               FROM `category` AS c
               WHERE cat_name LIKE ? LIMIT 1";
        $rows = $DATABASE->select($sql, "%$category%");
        
        if ($rows){
             //категория с таким названием уже есть, пропускаем и возвращаем ее ID
             //  print_r($rows);
             //  echo $rows[0]['ID'];
             //  echo $rows[0]['cat_name']; 
            $ID_cat = $rows[0]['ID'];
        
         }else{
             //такой категории нет, надо ее добавить
             // добавить @$DATABASE   !!!
             // в ID_cat возвращается значение автоинкрементного поля
                $ID_cat = $DATABASE->query('INSERT INTO `category` SET cat_name=?', $category);
         }
         //добавим пост
         
          $prem="0"; $post_status="publish"; $post_author="auto";
          // удаляем лишнюю порнографию из текстовых файлов
         $content = iconv("", "UTF-8//IGNORE", $content);
         $words  = str_word_count($content); 
          
          $post = $DATABASE->query('INSERT INTO `posts` SET post_date=NOW(), post_content=?, post_title=?, prem=?, post_status=?, post_author=?, words=?',  $content, $title, $prem, $post_status, $post_author, $words);
        
          //ТАКСОНОМИЯ!
         
          $tax = $DATABASE->query('INSERT INTO `relations` SET post_id=?, cat_id=?', $post, $ID_cat);
          
         
         
         
         
     }
     
    private function ordutf8($string, &$offset) {
    $code = ord(substr($string, $offset,1));
    if ($code >= 128) {        //otherwise 0xxxxxxx
        if ($code < 224) $bytesnumber = 2;                //110xxxxx
        else if ($code < 240) $bytesnumber = 3;        //1110xxxx
        else if ($code < 248) $bytesnumber = 4;    //11110xxx
        $codetemp = $code - 192 - ($bytesnumber > 2 ? 32 : 0) - ($bytesnumber > 3 ? 16 : 0);
        for ($i = 2; $i <= $bytesnumber; $i++) {
            $offset ++;
            $code2 = ord(substr($string, $offset, 1)) - 128;        //10xxxxxx
            $codetemp = $codetemp*64 + $code2;
        }
        $code = $codetemp;
    }
    $offset += 1;
    if ($offset >= strlen($string)) $offset = -1;
    return $code;
}
    
    
    
}
?>
